package capitulo3;

/***************************************************************************
 * Declaraciones de array, construccion e inicializacion (Objetivo 1.3)
 * ************************************************************************* 1.3
 * Desarrollar un codigo que declare, inicialice y use datos primitivos, arrays,
 * enumeraciones y objetos estaticos, instancias, y variables locales. Tambien
 * usar identificadores validos para nombre de variables.
 */

interface Sporty {
    void beSporty();
}

class Coche {}
class Subaru extends Coche {}

class Schoe {}
class Ferrari extends Coche implements Sporty {
    public void beSporty() {
        // implementa un metodo solo para los deportivos
    }
}
class RacingFlats extends Schoe implements Sporty {
    public void beSporty() {
        // implementa un metodo solo para estos estupendo zapatos
    }
}
class GolfClub { }

public class Tema21_Array02 {

	Tema21_Array02(int x) { System.out.println("1-arg const"); }
	Tema21_Array02() { System.out.println("no-arg const"); }
    static { System.out.println("1st static init"); }
    { System.out.println("1st instance init"); }
    { System.out.println("2nd instance init"); }
    static { System.out.println("2nd static init"); }
    
	public static void main(String[] args) {
		
		/* Asignaciones de elementos validos para un array */
		
		// Arrays de primitivos
		int[] weightList = new int[5];
		byte b = 4;
		char c = 'c';
		short s = 7;
		weightList[0] = b; // OK, byte is smaller than int
		weightList[1] = c; // OK, char is smaller than int
		weightList[2] = s; // OK, short is smaller than int
		

		//Arrays de referencias a objetos
		Coche [] myCars = {new Subaru(), new Coche(), new Ferrari()};
		
		// o este ejemplo
		Sporty[] sportyThings = new Sporty [3];
        sportyThings[0] = new Ferrari(); // OK, Ferrari
        // implements Sporty
        sportyThings[1] = new RacingFlats(); // OK, RacingFlats
        // implements Sporty
        //sportyThings[2] =  (Sporty) new GolfClub();
        // sportyThings[2] =  new GolfClub();
        // No OK; GolfClub no implementa Sporty
        // No me importa lo que se diga.
        
        /*Clases Init*/
        
        //Los bloques estaticos se ejecutan antes, sin importar si estan despues:
        new Tema21_Array02();
        new Tema21_Array02(7);

	}
	
	
	
	
}
